package gminet.infra.toolkit;

/**
 * @author: Gabriel Flores Mendes
 */
public final class StringToolkit {

    /**
     * ConversorToolkit constructor comment.
     */
    private StringToolkit() {
        super();
    }

    public static boolean isFill(String str) {

        return str != null && !str.trim().equals("");
    }

    public static boolean isDigit(String str) {

        boolean isDigit = false;
        if (isFill(str)) {
            try {
                Integer.parseInt(str);
                isDigit = true;
            } catch (Exception e) {
                isDigit = false;
            }
        }
        return isDigit;
    }

    public static String removeChars(String str, String toBeRemoved) {

        char[] temp = str.toCharArray();
        String retorno = "";
        for (int i = 0; i < temp.length; i++) {
            if (!(toBeRemoved.indexOf(temp[i] + "") != -1)) {
                retorno = retorno + temp[i];
            }
        }
        return retorno;
    }

    public static String left(String str, int n) {

        String retorno = "";
        if (n <= 0) {
            retorno = "";
        } else if (n >= str.length()) {
            retorno = str;
            while (n > retorno.length()) {
                retorno = " " + retorno;
            }
        } else {
            retorno = str.substring(0, n);
        }
        return retorno;
    }

    public static String leftNumber(int value, int n) {

        String strValue = String.valueOf(value);
        String retorno = "";
        if (n <= 0) {
            retorno = "";
        } else if (n >= strValue.length()) {
            retorno = strValue;
            while (n > retorno.length()) {
                retorno = "0" + retorno;
            }
        } else {
            retorno = strValue;
        }
        return retorno;
    }

    public static String right(String str, int n) {

        String retorno = "";
        if (n <= 0) {
            retorno = "";
        } else if (n >= str.length()) {
            retorno = str;
            while (n > retorno.length()) {
                retorno += " ";
            }
        } else {
            int len = str.length();
            retorno = str.substring(len - n, len);
        }
        return retorno;
    }

    public static String substring(String str, int start, int len) {

        String retorno = "";
        if ((start < 0) || (len < 0)) {
            retorno = "";
        } else {
            int end = 0;
            int strLen = str.length();
            if ((start + len) > strLen) {
                end = strLen;
            } else {
                end = start + len;
            }
            retorno = str.substring(start, end);
        }
        return retorno;
    }

    public static String replace(String origem, String substituir, String novaString) {

        try {
            if (origem != null) {
                StringBuffer sb = new StringBuffer(origem);
                int posOrigem = 0;
                while (origem.indexOf(substituir) != -1) {
                    posOrigem = origem.indexOf(substituir);
                    sb.replace(posOrigem, substituir.length() + posOrigem, novaString);
                    origem = sb.toString();
                }
                return origem;
            }
        } catch (java.lang.Exception ex) {
            System.err.println(ex);
        }
        return origem;
    }

    public static String toUpperCaseFirst(String string) {

        char[] chars = string.toCharArray();
        String result = "";
        boolean maiuscula = true;
        for (int i = 0; i < chars.length; i++) {
            if (maiuscula) {
                result += String.valueOf(chars[i]).toUpperCase();
            } else {
                result += String.valueOf(chars[i]).toLowerCase();
            }
            if (chars[i] == ' ' || chars[i] == '.') {
                maiuscula = true;
            } else {
                maiuscula = false;
            }
        }
        return result;
    }

    public static String getFirstName(String string) {

        char[] chars = string.trim().toCharArray();
        String result = "";
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ') {
                break;
            }
            result += String.valueOf(chars[i]);
        }
        return toUpperCaseFirst(result);
    }

}
